from spk.core.workspace import *

from .libs.proguard import SpecificCharacterProguard

class StepProguardGenerat(SpkWorker):
    '''构建一个 Proguard 字典

    这是一个简单的工作流
    1. 此工作流只需提供少量关键组成信息
    2. 您将可以预览生成内容
    3. 也可以下载它
    '''

    First  = "第一步：提供关键组成信息"
    Second = "第二步：下载字典"

    __steps__ = [
        First, Second
    ]

    __keywords__ = [
        "spk-progurad-input"
    ]

    def key(self, i):
        return self.__keywords__[i]

    def getkeyword(self, i):
        return get(self.key(i))
    
    def setkeyword(self, i, v):
        set(self.key(i), v)

    def __init__(self):
        super().__init__()

    def __do_work__(self):
        filepath = get('workdir') + '/proguard-generate.txt'


        if current() == self.First:

            # if self.getkeyword(0) is None:
            #     self.setkeyword(0, "0oO8O")
            #     st.rerun()

            input_text = st.text_input('关键内容 - 有空格时自动分词', value=self.getkeyword(0), placeholder='0oO8O 任意字符与中文')

            if input_text is not None:
                self.setkeyword(0, input_text)

                try:
                    with st.spinner('生成中'):
                        # 如果input中出现空格则自动分割列表
                        if ' ' in input_text:
                            # 使用split()不加参数会自动处理多个空格和去除空字符串
                            # keys = input_text.split()
                            keys = [k for k in input_text.split() if k]  # 过滤掉空字符串
                            SpecificCharacterProguard(filepath, *keys).start()
                        else:
                            SpecificCharacterProguard(filepath, input_text).start()
                except Exception as ex:
                    st.error(f'生成失败: {ex}')
                    return

                if st.button('准备下载', type="secondary"):
                    next_step()

                with open(filepath, 'r') as f:
                    st.write('字典预览:')
                    st.code(f.read())

        if current() == self.Second:
            prev_step(False)

            files = os.listdir(get('workdir'))
            filename = st.selectbox('选择字典', files)

            st.download_button(f'下载字典: {filename}', 
                               data=open(filepath, 'rb').read(),
                               file_name=filename)
            

        
        st.write('----------------')
        with st.expander('使用说明'):
            st.markdown('''\
此插件可生成混淆字典方案. 例如:

- 0oO8O
- 1iIlL丨
- 富强民主文明和谐自由平等公正法治爱国敬业诚信友善

''')


        with st.expander('参考项目'):
            st.page_link('https://github.com/WrBug/FrenziedProguard', label='1. FrenziedProguard (丧心病狂的Android混淆文件生成器)')
            st.page_link('https://github.com/ysrc/AndroidObfuseDictionary/', label='2. AndroidObfuseDictionary (Android混淆字典)')
            st.page_link('https://github.com/lantah-1/AndroidProguardGenerate', label='3. AndroidProguardGenerate (安卓混淆字典生成)')
        
